<?php

namespace EmailSend;

use PHPMailer\PHPMailer\PHPMailer;

class EmailSend
{
    private static $conn;

    public $from_user = ['duanjunrui@zhriches.com','zhangcheng@zhriches.com','zhaoqingyang@zhriches.com','fuxingbin@zhriches.com', '13661299225@163.com'];

    /**
     * EmailSend constructor.
     * @param $FromName     发件人姓名（昵称）
     */
    public function __construct($FromName = '')
    {
        self::$conn = self::getInstance($FromName);
    }

    private function getInstance($FromName = '')
    {
        if (self::$conn instanceof self) {
            return self::$conn;
        }else{
            self::$conn = new PHPMailer();
            try {
                //使用smtp鉴权方式发送邮件
                self::$conn->isSMTP();

                //smtp需要鉴权 这个必须是true
                self::$conn->SMTPAuth=true;

                //链接qq域名邮箱的服务器地址
                self::$conn->Host = 'smtp.qiye.aliyun.com';

                //设置使用ssl加密方式登录鉴权
                self::$conn->SMTPSecure = 'ssl';

                //设置ssl连接smtp服务器的远程服务器端口号，以前的默认是25，但是现在新的好像已经不可用了 可选465或587
                self::$conn->Port = 465;

                //设置发送的邮件的编码 可选GB2312 我喜欢utf-8 据说utf8在某些客户端收信下会乱码
                self::$conn->CharSet = 'UTF-8';

                //设置发件人姓名（昵称） 任意内容，显示在收件人邮件的发件人邮箱地址前的发件人姓名
                self::$conn->FromName = $FromName;

                //smtp登录的账号 这里填入字符串格式的qq号即可
                self::$conn->Username ='zhonghengcaifu@zhriches.com';

                //smtp登录的密码 使用生成的授权码（就刚才叫你保存的最新的授权码）
                self::$conn->Password = '1234Qwer';
                //设置发件人邮箱地址 这里填入上述提到的“发件人邮箱”
                self::$conn->From = 'zhonghengcaifu@zhriches.com';

            } catch (\Exception $e) {
                echo 'Message could not be sent. Mailer Error: ', self::$conn->ErrorInfo;
            }
        }
        return self::$conn;
    }

    /**
     * 邮件发送
     * @param $email    收件人地址
     * @param $title    邮件标题
     * @param $content  邮件内容
     */
    public function send($email = [], $title = '', $content = '')
    {
        //设置收件人邮箱地址 该方法有两个参数 第一个参数为收件人邮箱地址 第二参数为给该地址设置的昵称 不同的邮箱系统会自动进行处理变动 这里第二个参数的意义不大
        if(is_string($email) && !empty($email)){
            self::$conn->addAddress($email);
        }else{
            $email = empty($email) ? $this->from_user : $email;
            foreach($email as $val){
                self::$conn->addAddress($val);
            }
        }

        //添加该邮件的主题
        self::$conn->Subject = $title;

        //添加邮件正文 上方将isHTML设置成了true，则可以是完整的html字符串 如：使用file_get_contents函数读取本地的html文件
        self::$conn->Body = $content;

        return  self::$conn->send();
    }

    //防止对象被复制
    public function __clone()
    {
        trigger_error('Clone is not allowed !');
    }

    //防止反序列化后创建对象
    private function __wakeup()
    {
        trigger_error('Unserialized is not allowed !');
    }
}